home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <dpmi.h>
- #include <sys\movedata.h>
- #include <stdlib.h>
- #include <sys\nearptr.h>
- #include "mgraph.h"
- #include "mfont.h"
- #include "mkey.h"
- #include <pc.h>
-
- fontset font;
-
- char scantoascii[86]=("!!1234567890-=!!qwertyuiop[]!~asdfghjkl:\"~~\\zxcvbnm,.?~*~ ~~~~~~~~~~~~~~!~-!~!+~!~~~~~");
-
- void font_init(char *fname)
- {
- FILE *f;
- /* set the characters I couldn't figure out how to represent in the
- initializer */
- scantoascii[1]=27;
- scantoascii[14]=8;
- scantoascii[15]=9;
- scantoascii[28]=13;
- scantoascii[72]=24;
- scantoascii[75]=8;
- scantoascii[77]=26;
- scantoascii[80]=25;
- f=fopen(fname,"rb");
- fread(font,1,sizeof(fontset),f);
- fclose(f);
- }
-
- char *input(char *text,int x,int y,byte len,byte col)
- {
- char key;
- int bx,j,count;
- bx=x;
- count=0;
- text[0]='\0';
- do {
- while(!kbhit()) {
- box(x,y,x+5,y+5,col,screen);
- waitretrace();
- box(x,y,x+5,y+5,0,screen);
- }
- key=getch();
- if((key>='a')&&(key<='z')) key=key-32;
- if((key==8)&&(count>0)) {
- box(bx,y,x+5,y+5,0,screen);
- text[--count]='\0';
- print(bx,y,col,0,text,screen);
- x=bx+strlen(text)*6;
- }
- if((key<126)&&(key>31)&&(count<len)) {
- text[count++]=key;
- text[count]='\0';
- print(bx,y,col,0,text,screen);
- x=bx+strlen(text)*6;
- }
- } while (key!=13);
- return text;
- }
-
- void printchar(unsigned char c,int x,int y,scrntype scrn,byte c1,byte c2)
- {
- byte *src;
- byte *dst;
- register byte ty;
- register byte tx;
- c-=33;
- if(c>63) return;
- src=&(font[c][0]);
- dst=&(scrn[x+y*320]);
- for(ty=0;ty<5;ty++) {
- tx=*(src++);
- if(tx&1) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- if(tx&2) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- if(tx&4) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- if(tx&8) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- if(tx&16) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- if(tx&32) {
- *dst=c1;
- *(++dst)=c2;
- } else ++dst;
- dst+=314;
- }
- }
-
- void print(int x,int y,byte c1,byte c2,char *s,scrntype scrn)
- {
- int i;
- for(i=0;i<strlen(s);i++) {
- printchar(s[i],x,y,scrn,c1,c2);
- x+=6;
- }
- }
-
- void printnum(int x,int y,byte c1,byte c2,long num,scrntype scrn)
- {
- char text[40];
- sprintf(text,"%i",num);
- print(x,y,c1,c2,text,scrn);
- }
-
- char *kb_input(char *text,int x,int y,byte len,byte col)
- {
- char key;
- int bx,j,count;
- bx=x;
- count=0;
- text[0]='\0';
- do {
- while(!keypress()) {
- box(x,y,x+5,y+5,col,screen);
- waitretrace();
- box(x,y,x+5,y+5,0,screen);
- }
- key=0;
- for(j=1;j<85;j++)
- if(keystate(j)==pressed) {
- key=scantoascii[j];
- j=84;
- }
- if((key>='a')&&(key<='z')) key=key-32;
- if((keystate(LShift)==held)||(keystate(RShift)==held)) {
- if((key>='a')&&(key<='z')) key=key-32;
- if((key>='0')&&(key<='9')) key='!';
- }
- if((key==8)&&(count>0)) {
- box(bx,y,x+5,y+5,0,screen);
- text[--count]='\0';
- print(bx,y,col,0,text,screen);
- x=bx+strlen(text)*6;
- }
- if((key<126)&&(key>31)&&(count<len)) {
- text[count++]=key;
- text[count]='\0';
- print(bx,y,col,0,text,screen);
- x=bx+strlen(text)*6;
- }
- } while (key!=13);
- return text;
- }
-